package cn.ljy.uem.dao;


import cn.ljy.authority.dao.BaseMapper;
import cn.ljy.authority.model.SysUserRole;
import cn.ljy.uem.model.SchoolMajorGroupTeacher;
import cn.ljy.uem.model.SchoolTeacher;
import org.apache.ibatis.annotations.*;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
 * @description 专业群与群主关系的数据层操作类
 * @author 王秋林
 * @date 2022-7-20 10:41
 */
@Mapper
public interface SchoolMajorGroupTeacherMapper {

    /**
     * 根据指定专业群包含的群主集合
     * @param majorGroupId
     * @return
     */
    List<SchoolTeacher> findAllTeacherByMajorGroupId(Integer majorGroupId);

    /**
     * 根据指定专业群获取拥有的所有群主数量
     * @param majorGroupId
     * @return
     */
    @Select("select count(1) from school_major_group_teacher where major_group_id = #{majorGroupId}")
    int countAllTeacherByMajorGroupId(Integer majorGroupId);

    /**
     * 根据指定专业群获取拥有的所有群主类型数量
     * @param majorGroupId type
     * @return
     */
    @Select("select count(1) from school_major_group_teacher where major_group_id = #{majorGroupId} and `type`=#{type}")
    int countByUserIdAndRoleId(Serializable majorGroupId, Serializable type);

    /**
     * 插入专业群和教室及群主类型的关系
     * @param majorGroupId
     * @param teacherId
     * @param type
     * @return
     */
    @Insert("insert into school_major_group_teacher(major_group_id,teacher_id,type,create_time) values(#{majorGroupId},#{teacherId},#{type},now())")
    int save(Serializable majorGroupId, Serializable teacherId,Serializable type);

    /**
     * 移除专业群和和教室的关系
     * @param majorGroupId
     * @param teacherId
     * @return
     */
    @Delete("delete from school_major_group_teacher where major_group_id=#{majorGroupId} and teacher_id=#{teacherId}")
    int delete(Serializable majorGroupId, Serializable teacherId);

    /**
     * 删除该专业群对应的专业群与教师的关系  按照专业群Id删除整个专业群群主
     * @param majorGroupIds 专业群集合
     */
    int deleteByMajorGroupIds(java.io.Serializable[] majorGroupIds);


//    /**
//     * 删除该账户对应的角色与账户的关系
//     * @param userIds 账户集合
//     */
//    int deleteByUserIds(java.io.Serializable[] userIds);

    /**
     * 一次插入多条记录,并且每个记录在插入后都会自动为集合内的元素加上主键
     * 说明：集合为空则不插入任何记录
     * @param collection 不能为Null,且集合不能为空
     * @return 返回插入的记录数
     */
    int saveAllIn(Collection<SchoolMajorGroupTeacher> collection);

    /**
     *批量删除集合对象，长度如果为0则不进行任何处理
     * @param collection
     * @return  删除的记录数，>=1表示删除成功，0表示删除失败
     */
    int deleteAllIn(@Param(value = "collection")Collection<SchoolMajorGroupTeacher> collection);


}
